package com.iakuil.app.common.restful.doc;

import com.iakuil.app.common.core.DictEnum;
import com.iakuil.app.common.core.util.DictEnumUtils;

import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.stream.Collectors;

/**
 * SpringDoc通用枚举自定义配置
 *
 * @author Kai
 */
public abstract class AbstractDictEnumCustomizer {
    protected String getDescription(Class<?> clazz) {
        List<DictEnum<?>> dictEnums = DictEnumUtils.getMembers(getEnumType(clazz));
        return dictEnums.stream()
            .map(item -> item.getLabel() + " : " + item.getValue())
            .collect(Collectors.joining("； "));
    }

    protected List<Object> getValues(Class<?> clazz) {
        List<DictEnum<?>> dictEnums = DictEnumUtils.getMembers(getEnumType(clazz));
        return dictEnums.stream().map(DictEnum::getValue).collect(Collectors.toList());
    }


    @SuppressWarnings({"unchecked"})
    private Class<? extends DictEnum<?>> getEnumType(Class<?> clazz) {
        ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericSuperclass();
        return (Class<? extends DictEnum<?>>) parameterizedType.getActualTypeArguments()[0];
    }
}
